package org.xtext.runtime.util;

import org.xtext.runtime.formula.AND;
import org.xtext.runtime.formula.AcreHistory;
import org.xtext.runtime.formula.CartagoProperty;
import org.xtext.runtime.formula.Equal;
import org.xtext.runtime.formula.Goal;
import org.xtext.runtime.formula.GreaterThan;
import org.xtext.runtime.formula.GreaterThanOrEqual;
import org.xtext.runtime.formula.IFormula;
import org.xtext.runtime.formula.IMPLIES;
import org.xtext.runtime.formula.LessThan;
import org.xtext.runtime.formula.LessThanOrEqual;
import org.xtext.runtime.formula.LibraryFormula;
import org.xtext.runtime.formula.NOT;
import org.xtext.runtime.formula.NotEqual;
import org.xtext.runtime.formula.Predicate;
import org.xtext.runtime.formula.TRActive;
import org.xtext.runtime.term.Addition;
import org.xtext.runtime.term.CountTerm;
import org.xtext.runtime.term.Divide;
import org.xtext.runtime.term.ITerm;
import org.xtext.runtime.term.LibraryTerm;
import org.xtext.runtime.term.List;
import org.xtext.runtime.term.ListConstructor;
import org.xtext.runtime.term.Modulo;
import org.xtext.runtime.term.Multiply;
import org.xtext.runtime.term.Subtraction;
import org.xtext.runtime.term.Term;
import org.xtext.runtime.term.Variable;

public interface ILogicVisitor {
	public IFormula visit(AND and);
	public IFormula visit(Equal equal);
	public IFormula visit(Goal goal);
	public IFormula visit(GreaterThan gt);
	public IFormula visit(GreaterThanOrEqual gt);
	public IFormula visit(IMPLIES implies);
	public IFormula visit(LessThan lt);
	public IFormula visit(LessThanOrEqual lt);
	public IFormula visit(NOT not);
	public IFormula visit(NotEqual neql);
	public IFormula visit(Predicate predicate);
	public IFormula visit(TRActive active);
	public IFormula visit(LibraryFormula libraryFormula);
	public IFormula visit(CartagoProperty cartagoProperty);
	public IFormula visit(AcreHistory acreHistory);

	public ITerm visit(Addition addition);
	public ITerm visit(Divide divide);
	public ITerm visit(LibraryTerm term);
	public ITerm visit(List list);
	public ITerm visit(ListConstructor constructor);
	public ITerm visit(Modulo modulo);
	public ITerm visit(Multiply multiply);
	public ITerm visit(Subtraction subtraction);
	public ITerm visit(Term<?> term);
	public ITerm visit(Variable variable);
	public ITerm visit(CountTerm countTerm);
}
